Linux Ftp上传文件变更(MD5值变更)

最近遇到一个很棘手的问题. 问题很简单:


一般情况下使用ftp上传就是这个样子:

如下脚本:

$ vim copy.sh 
#! /bin/bash

remote_path=远程地址

if [ -f $1 ]
then
ftp -i -n <<UPLOAD
open ftp服务器
user 账户名 密码
put $1 $remote_path$1
quit
UPLOAD
fi

这是文本文件内容. vim会默认在文件末尾追加\n

$ vim xxx
123!$
hello!$
456$

将写好的文件传到ftp服务器:

$ ./copy.sh xxx

结果传上去之后发现文本内容跟本地内容不匹配. 肉眼看完了都没看到是什么缘故.  如下:

服务器上:
$ md5sum xxx
7f228319446badf0b351a74a62116074  xxx

本地文件:
$ md5sum xxx
e1ea0c6e041a34a40c5ae78a12af2e20  xxx


果断对比文本内容:

本地文件:

$ od -tx1 -tc xxx
0000000  31  32  33  21  0a  68  65  6c  6c  6f  21  0a  34  35  36  0a
          1   2   3   !  \n   h   e   l   l   o   !  \n   4   5   6  \n
0000020
ftp服务器上:

$ od -tx1 -tc xxx
0000000  31  32  33  21  0d  0a  68  65  6c  6c  6f  21  0d  0a  34  35
          1   2   3   !  \r  \n   h   e   l   l   o   !  \r  \n   4   5
0000020  36  0d  0a
          6  \r  \n
0000023

惊讶的发现ftp客户端在上传的时候往文本后面添加了个 \r  !    何其的可耻.


man 了一下. 发现了 ftp的传输模式. 区分ASCII 和 binary. 一个是按文本读取, 一个是按二进制读取. 文本读取会判定本地与远程的服务器类型从而默认增添数据. 


因此修改命令即可:

$ vim copy.sh 
#! /bin/bash

remote_path=远程地址

if [ -f $1 ]
then
ftp -i -n <<UPLOAD
open ftp服务器
user 账户名 密码
binary                   <----
put $1 $remote_path$1
quit
UPLOAD
fi


可参考这篇博文:

http://7905648.blog.51cto.com/7895648/1298447








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值